package cl.ncx.cmvrc.persistence.bean.operadorGrua;

import java.util.List;

import javax.ejb.EJBException;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import cl.ncx.cmvrc.persistence.base.entities.grua.EstadoGrua;
import cl.ncx.cmvrc.persistence.base.entities.grua.Grua;
import cl.ncx.cmvrc.persistence.base.entities.personas.Gruero;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.OrdenDeTrabajo;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.Solicitud;

@Stateless(mappedName=IOperadorGruaSession.JNDI_NAME)
@Local({OperadorGruaSessionLocal.class})
@Remote({OperadorGruaSessionRemote.class})

public class OperadorGruaSessionBean implements OperadorGruaSessionLocal, OperadorGruaSessionRemote {
	
	@PersistenceContext(unitName="cmvrcPU")
	private EntityManager entityManager;
	
	public void asignaGrua(OrdenDeTrabajo ordenDeTrabajo) throws EJBException{
		
		try{
			OrdenDeTrabajo asigna = new OrdenDeTrabajo();
			asigna = entityManager.find(OrdenDeTrabajo.class, ordenDeTrabajo);
			asigna.getGrua().getGruaId();
			asigna.getGruero().getGrueroId();
			asigna.getSolicitud().getSolicitudId();
			asigna.getGrua().getEstadoGrua().getEstadoGruaId();
			
			entityManager.persist(asigna);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Gruero> obtenerGruaDisponible() throws EJBException{
		try{
			String queryString= "SELECT gruero " +
								"FROM Gruero gruero " +
								"WHERE gruero.grua.estadoGrua.estadoGruaId = 1";
			Query query = entityManager.createQuery(queryString);
			return (List<Gruero>)query.getResultList();	
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}
	
	public void modificaEstado(Grua grua) throws EJBException{
		
		try{
			Grua modifica = new Grua();
			modifica = entityManager.find(Grua.class, grua);
			modifica.setGruaId(grua.getGruaId());
			modifica.setOrdenDeTrabajos(grua.getOrdenDeTrabajos());
			modifica.setEstadoGrua(grua.getEstadoGrua());
			
			entityManager.merge(modifica);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}
	
	public void registraHoraLlegada(Solicitud solicitud) throws EJBException{
		
		try{
			Solicitud horaLlegada = new Solicitud();
			horaLlegada = entityManager.find(Solicitud.class, solicitud);
			horaLlegada.setSolicitudId(solicitud.getSolicitudId());
			horaLlegada.setAutoridad(solicitud.getAutoridad());
			horaLlegada.setDireccion(solicitud.getDireccion());
			horaLlegada.setFichaVehiculo(solicitud.getFichaVehiculo());
			
			entityManager.persist(horaLlegada);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}

}
